#!/bin/bash

# ssh_time_sync.sh - 远程服务器时间同步脚本
# 该脚本用于批量同步本地时间到远程服务器。
# 它会读取服务器列表文件（servers.txt），并使用 sshpass 进行无密码 SSH 连接。
#
# 功能：
# - 检查并安装 sshpass
# - 读取服务器列表，解析用户、IP、密码信息
# - 使用 SSH 将本机时间同步到远程服务器
# - 记录同步成功与失败的日志

# 服务器列表存储文件
SERVER_LIST="servers.txt"

# 确保 sshpass 已安装
install_sshpass() {
    if ! command -v sshpass &> /dev/null; then
        echo "[INFO] sshpass 未安装，正在尝试安装..."
        sudo apt-get update && sudo apt-get install -y sshpass
    else
        echo "[INFO] sshpass 已安装"
    fi
}

# 远程同步本地时间到服务器
sync_local_time() {
    local user=$1
    local host=$2
    local pass=$3
    local local_time=$(date +"%Y-%m-%d %H:%M:%S")
    echo "[INFO] 正在同步本地时间到服务器: ${host}"
    sshpass -p "${pass}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "${user}@${host}" \
        "sudo date -s '${local_time}' && sudo hwclock -w"
    if [ $? -eq 0 ]; then
        echo "[SUCCESS] 时间同步完成: ${host}"
    else
        echo "[ERROR] 无法同步时间: ${host}" >&2
    fi
}

main() {
    install_sshpass
    if [ ! -f "${SERVER_LIST}" ]; then
        echo "[ERROR] 服务器列表文件 ${SERVER_LIST} 不存在！" >&2
        exit 1
    fi

    while IFS=',' read -r REMOTE_USER REMOTE_HOST REMOTE_PASS; do
        if [[ -n "${REMOTE_USER}" && -n "${REMOTE_HOST}" && -n "${REMOTE_PASS}" ]]; then
            sync_local_time "${REMOTE_USER}" "${REMOTE_HOST}" "${REMOTE_PASS}"
        else
            echo "[WARNING] 跳过无效条目: ${REMOTE_USER}, ${REMOTE_HOST}" >&2
        fi
    done < "${SERVER_LIST}"
    echo "[INFO] 所有服务器本地时间同步任务完成"
}

main


